package com.rgc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.rgc.domain.Evento;
import com.rgc.domain.EventoJuego;
import com.rgc.domain.Ranking;
import com.rgc.domain.Resultado;
import com.rgc.domain.Usuario;

public class ResultadoDaoImpl extends JdbcDaoSupport implements ResultadoDao {

	public boolean addResultado(List<Resultado> resultado) {
		
		for(final Resultado res:resultado){
			final String sql = "INSERT INTO resultado(idparticipante1,idparticipante2,win1,win2,ganador,ronda,puntaje) values(?,?,?,?,?,?,?)";
			getJdbcTemplate().update(
					new PreparedStatementCreator()
			        {
			            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
			            {
			                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			                preparedStatement.setString(1,res.getIdparticipante1());
			                preparedStatement.setString(2,res.getIdparticipante2());
			                preparedStatement.setString(3,res.getWin1());
			                preparedStatement.setString(4,res.getWin2());
			                preparedStatement.setString(5,res.getGanador());
			                preparedStatement.setString(6,res.getRonda());
			                preparedStatement.setString(7,res.getPuntaje());
			                
			                return preparedStatement;
			            }
			        }	
					);		
			
			
		}
  
		return true;
           
	}

	public Resultado getResultado(String participante) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Resultado> getResultadoUsuario(EventoJuego eventojuego) {
	
		try {
			String sql = "  select a.idresultado, "+
					     "  a.idparticipante1, "+
					     "  a.idparticipante2, "+
					     "  a.win1,a.win2,a.ronda, "+
						 "  u.username as nombreusuarioequipo1, "+
						 "  x.username as nombreusuarioequipo2, "+
					     "  u.idusuario as idusuarioequipo1, "+
						 "  x.idusuario as idusuarioequipo2, "+
					     "  z.username as ganador "+
					     "  from resultado a,participante b,participante c,participante d,usuario u,usuario x,usuario z "+
					     "  where a.idparticipante1=b.idparticipante "+
					     "  and a.idparticipante2=c.idparticipante "+
					     "  and a.ganador=d.idparticipante "+
					     "  and b.idevento_juego='"+eventojuego.getIdevento_juego()+"' "+
					     "  and c.idevento_juego='"+eventojuego.getIdevento_juego()+"' "+
					     "  and b.idusuario=u.idusuario "+
					     "  and c.idusuario=x.idusuario "+
					     "  and d.idusuario = z.idusuario "+
					     "  order by ronda desc ";
			
			System.out.println(sql);
			List<Resultado> res =  getJdbcTemplate().query(sql, new BeanPropertyRowMapper<Resultado>(Resultado.class));
         
			
			return res;
			
		        	
		    } catch (Exception e) {
		            System.out.println(e.getMessage());
		            e.printStackTrace();
		    }
		   
			return null;
			}

	public List<Resultado> getResultadoEquipo(EventoJuego eventojuego) {
		
		try {
			String sql = "  select a.idresultado, "+
					     "  a.idparticipante1, "+
					     "  a.idparticipante2, "+
					     "  a.win1,a.win2,a.ronda, "+
						 "  u.nombre as nombreusuarioequipo1, "+
						 "  x.nombre as nombreusuarioequipo2, "+
					     "  u.idequipo as idusuarioequipo1, "+
						 "  x.idequipo as idusuarioequipo2, "+
					     "  z.nombre as ganador "+
					     "  from resultado a,participante b,participante c,participante d,equipo u,equipo x,equipo z "+
					     "  where a.idparticipante1=b.idparticipante "+
					     "  and a.idparticipante2=c.idparticipante "+
					     "  and a.ganador=d.idparticipante "+
					     "  and b.idevento_juego='"+eventojuego.getIdevento_juego()+"' "+
					     "  and c.idevento_juego='"+eventojuego.getIdevento_juego()+"' "+
					     "  and b.idequipo=u.idequipo "+
					     "  and c.idequipo=x.idequipo "+
					     "  and d.idequipo = z.idequipo "+
					     "  order by ronda desc ";
			
			System.out.println(sql);
			List<Resultado> res =  getJdbcTemplate().query(sql, new BeanPropertyRowMapper<Resultado>(Resultado.class));
         
			
			return res;
			
		        	
		    } catch (Exception e) {
		            System.out.println(e.getMessage());
		            e.printStackTrace();
		    }
		   
			return null;
			}

	public String[] getMisTorneos(Usuario usuario) {
		String[] retorno=new String[2];
		retorno[0]="";
		retorno[1]="";
		try {
			
			String sql = " select * from participante a,evento_juego b,evento c "
						+ " where a.idevento_juego=b.idevento_juego and b.estado=2 and c.idevento=b.idevento "
						+ "and a.idusuario='"+usuario.getIdusuario()+"' "
						+ "order by c.fecha_evento desc ";
			System.out.println(sql);
			List<Evento> res =  getJdbcTemplate().query(sql, new BeanPropertyRowMapper<Evento>(Evento.class));
			if(res.size()>0){	
				retorno[0]=res.size()+"";
				retorno[1]=res.get(0).getFecha_evento().replace("00:00:00.0", "");
			}
			
		        	
		    } catch (Exception e) {
		            System.out.println(e.getMessage());
		            e.printStackTrace();
		    }
		   
		
			return retorno;
	
	}
	

}
